#pragma once

#include <Arduino.h>
#include "Screen.h"
#include "Keys.h"
#include <math.h>
#include "pins_config.h"

// 陀螺仪立方体类
class Cube {
public:
  // 功能入口
  void main(Screen& screen, Keys& keys);

private:
  // 屏幕常量
  static const int CENTER_X = 120;  // 屏幕中心X
  static const int CENTER_Y = 300;  // 屏幕中心Y

  // 立方体参数
  static const int CUBE_SIZE = 60;    // 立方体边长
  static const int NUM_VERTICES = 8;  // 8个顶点
  static const int NUM_EDGES = 12;    // 12条边

  // 信息显示位置
  static const int INFO_Y = 10;

  // 立方体顶点定义（本地坐标系）
  static const float VERTICES[8][3];

  // 立方体边的定义（顶点索引对）
  static const int EDGES[12][2];

  // 渲染后的顶点坐标
  float projectedVertices[NUM_VERTICES][2];

  // 旋转角度（弧度）
  float rotX;
  float rotY;
  float rotZ;

  // 自动旋转模式
  bool autoRotate;
  float autoRotSpeed;

  // 时间控制
  unsigned long lastUpdateTime;

  // 初始化
  void init();

  // 绘制函数
  void drawCube(Screen& screen);
  void drawAxes(Screen& screen);
  void drawInfo(Screen& screen);
  void drawHelp(Screen& screen);

  // 3D数学计算
  void rotateCube(float angleX, float angleY, float angleZ);
  void projectVertices();
  void rotatePoint(float& x, float& y, float& z, float rx, float ry, float rz);

  // 输入处理
  void handleInput(Keys& keys);

  // 工具函数
  float degToRad(float degrees);  // 角度转弧度
};